package com.xuecheng.content.feignclient;

import com.xuecheng.content.config.MultipartSupportConfig;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@Component//原本不支持MultipartFile文件格式
@FeignClient(value = "media-api",configuration = {MultipartSupportConfig.class},fallbackFactory = MediaServiceClientFallbackFactory.class)
public interface MediaServiceClient {
//    todo openfeign 为什么返回类型可以变为String
    @RequestMapping(value = "/media/upload/coursefile",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public String upload(@RequestPart("filedata") MultipartFile filedata,//传入了objectName就按照这个目录来存储
                                      @RequestParam(value= "objectName",required=false) String objectName) throws IOException;
}

//1.OpenFeign 允许调用方与服务端返回类型不同，核心依赖 JSON 字段名匹配。但为了稳定性和可维护性，建议保持返回类型的 “必要一致性”，仅在确有需要时使用字段子集或忽略未知字段。
//2.在 OpenFeign 调用中，调用方可以直接用 String 类型接收服务端的返回结果，这是完全可行的。
//此时，OpenFeign 会将服务端返回的原始响应体（通常是 JSON 字符串、普通文本等）直接以字符串形式返回，不会进行任何对象反序列化处理。

